- https://baike.baidu.com/item/Hash/390310?fr=aladdin
- 关键词
- 任意长度输入
- 固定长度输出
- 特征
- 理论上输入跟输出并不是一对一
- 实际使用假定不会出现碰撞或者冲突
- 常用算法
- MD4
- MD5
- SHA-1
- 应用场景
- 数字签名
- 文件校验
# 哈希表
- 是根据关键码值(Key value)而直接进行访问的数据结构
- 常用算法
- 直接寻址
- 数字分析
- 平方取中
- 折叠法
- 随机数
- 除留余数法
- 冲突处理
- 链地址法
- 建立公共溢出区
- 再散列
- 性能
- 散列函数是否均匀
- 冲突处理
# 密码存储
- 明文vs密文
- 明文:可直接读懂含义
- 密文:不可直接读懂
- hash密码
- 防止密码泄露
- 不能防备字典攻击
- 加盐
- 防备字典攻击
- python代码示例
# 导入模块
import hashlib
# 使用MD5作为散列算法
m = hashlib.md5()
# 把值放入散列
m.update(bytes(request.POST['password'], encoding="utf8"))
# 生成相应的md5值
ob.password = m.hexdigest()